package br.com.estudosjsf.leilao.domain;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import javax.enterprise.context.Dependent;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;
import javax.persistence.SequenceGenerator;

@Dependent
@Entity
public class Modelo implements Serializable {

	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;

	
	@Id
	@GeneratedValue(generator="modelo_id_seq", strategy=GenerationType.SEQUENCE)
	@SequenceGenerator(name="modelo_id_seq",sequenceName="modelo_id_seq", allocationSize=1)
	private Integer id;
	private String nome;
	private String motorizacao;
	private Date dataLancamento;
	private Integer qtdPassageiros = 2;
	private String linkVideo;
	
	@ManyToOne(fetch=FetchType.EAGER)
	@JoinColumn(name="id_marca")
	private Marca marca;
	
	@OneToMany(mappedBy="modelo")
	private List<Avaliacao> listaAvaliacoes = new ArrayList<Avaliacao>();
	

	public String getMotorizacao() {
		return motorizacao;
	}
	public void setMotorizacao(String motorizacao) {
		this.motorizacao = motorizacao;
	}
	public Date getDataLancamento() {
		return dataLancamento;
	}
	public void setDataLancamento(Date dataLancamento) {
		this.dataLancamento = dataLancamento;
	}
	public Integer getQtdPassageiros() {
		return qtdPassageiros;
	}
	public void setQtdPassageiros(Integer qtdPassageiros) {
		this.qtdPassageiros = qtdPassageiros;
	}
	public String getLinkVideo() {
		return linkVideo;
	}
	public void setLinkVideo(String linkVideo) {
		this.linkVideo = linkVideo;
	}
	public Marca getMarca() {
		return marca;
	}
	public void setMarca(Marca marca) {
		this.marca = marca;
	}
	public List<Avaliacao> getListaAvaliacoes() {
		return listaAvaliacoes;
	}
	public void setListaAvaliacoes(List<Avaliacao> listaAvaliacoes) {
		this.listaAvaliacoes = listaAvaliacoes;
	}
	public Integer getId() {
		return id;
	}
	public void setId(Integer id) {
		this.id = id;
	}
	public String getNome() {
		return nome;
	}
	public void setNome(String nome) {
		this.nome = nome;
	}
	
	@Override
	public int hashCode() {
		return getNome().length() * 8;
	}
	
	@Override
	public boolean equals(Object obj) {
		if((obj instanceof Avaliacao) && ((Avaliacao)obj).getNome().equals(this.getNome())){
			return true;
		} else{
			return false;
		}
	}
}